package com.czk.anotation;

import com.czk.interfaces.ITableSharedStrategy;

import java.lang.annotation.*;

/**
 * 自定义分表注解
 * 注解的作用范围是类、接口、函数，运行时生效。
 * <p>
 * tableNamePrefix与shardStrategy属性都好理解，表前缀名和分表策略，剩下的value与fieldFlag要怎么理解，分表策略分两类，第一类依赖表中某个字段值，第二类则不依赖。
 * <p>
 * 根据企业id取模，属于第一类，此处的value设置企业id入参字段名，fieldFlag为true，意味着，会去解析获取企业id字段名对应的值。
 * <p>
 * 根据日期分表，属于第二类，直接在分表策略实现类里面写就行了，不依赖表字段值，value与fieldFlag无需填写，当然你value也可以设置时间格式，具体看分表策略实现类的逻辑
 *
 * @Author:ChenZhangKun
 * @Date: 2021/5/17 10:04
 */
@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableShared {
    /**
     * 表的前缀名
     *
     * @return
     */
    String tablePrefix();

    /**
     * 表的id值
     *
     * @return
     */
    String value() default "";

    /**
     * 是否是字段名，如果是需要解析请求参数改字段名的值（默认否）
     *
     * @return
     */
    boolean fieldFlag() default false;

    /**
     * 对应的分表策略
     *
     * @return
     */
    Class<? extends ITableSharedStrategy> sharedStrategy();

}
